package com.example.demo.redis;

import java.util.*;

/**
 * Redis操作
 */
public interface RedisUtil {

    // ---------String----------- //

    /**
     * 设置字符串
     * @param key
     * @param val
     */
    void strSet(String key, String val);

    /**
     * 获取字符串
     * @param key
     * @return
     */
    String strGet(String key);

    /**
     * 获取旧的字符串并设置新的字符串
     * @param key
     * @param val
     * @return
     */
    String strGetSet(String key, String val);

    /**
     * 设置有过期时间的字符串
     * @param key
     * @param val
     * @param exTime 过期时间，秒为单位
     */
    void strSetEx(String key, String val, Long exTime);

    /**
     * 批量获取字符串
     * @param stringList key的集合
     * @return
     */
    List<String> strGet(List<String> stringList);

    /**
     * 批量新增字符串
     * @param map
     */
    void strSet(Map<String, String> map);

    /**
     * 获取字符串过期时间
     * @param key
     * @return 返回还有多少秒过期
     */
    Long strGetExpire(String key);

    /**
     * 删除指定字符串
     * @param key
     */
    void strDel(String key);

    /**
     * 批量删除字符串
     * @param keys
     */
    void strDel(List<String> keys);

    /**
     * 判断是否存在某字符串
     * @param key
     * @return
     */
    Boolean strHasKey(String key);

    /**
     * 设置字符串过期时间
     * @param key
     * @param expTime
     */
    void strSetExpire(String key, Long expTime);

    /**
     * 设置字符串在某个时间过期
     * @param key
     * @param date
     */
    void strSetExpireAt(String key, Date date);

    /**
     * 设置key如果不存在
     * @param key
     * @param val
     * @return
     */
    Boolean strSetIfAbsent(String key, String val);

    /**
     * 查找所有符合给定模式 pattern 的 key
     * @param key
     * @return
     */
    Set<String> strKeyS(String key);
}
